/**
 * 收货地址列表页面
 * 功能：展示用户的收货地址列表，支持新增、编辑、删除和设置默认地址
 */
var app = getApp();
var moduleUrl = app.baseUrl + '/client/address';

Page({
  data: {
    addressList: [], // 地址列表
    fromOrder: false, // 是否从订单页面跳转而来
  },

  onLoad(options) {
    // 判断是否从订单页面跳转而来
    if (options.from === 'order') {
      this.setData({
        fromOrder: true
      });
    }
  },

  onShow() {
    // 每次页面显示时获取最新的地址列表
    this.getAddressList();
  },

  /**
   * 获取用户的收货地址列表
   */
  getAddressList() {
    var that = this;
    dd.showLoading({
      content: '加载中...'
    });

    dd.httpRequest({
      url: moduleUrl + '/list',
      method: 'GET',
      headers: {
        "Content-Type": "application/json"
      },
      data: {
        userId: app.userId
      },
      success: function(res) {
        console.log('地址列表:', res);
        if (res.data.status === 200) {
          that.setData({
            addressList: res.data.data || []
          });
        } else {
          dd.showToast({
            type: 'fail',
            content: res.data.message || '获取地址列表失败',
            duration: 2000
          });
        }
      },
      fail: function(error) {
        console.error('获取地址列表失败:', error);
        dd.showToast({
          type: 'fail',
          content: '网络异常，请稍后重试',
          duration: 2000
        });
      },
      complete: function() {
        dd.hideLoading();
      }
    });
  },

  /**
   * 新增收货地址
   */
  addAddress() {
    // 判断是否达到地址上限
    if (this.data.addressList.length >= 10) {
      dd.showToast({
        type: 'fail',
        content: '最多可添加10个收货地址',
        duration: 2000
      });
      return;
    }
    
    // 跳转到地址编辑页面
    dd.navigateTo({
      url: '/pages/address/edit'
    });
  },

  /**
   * 编辑收货地址
   */
  editAddress(e) {
    const address = e.currentTarget.dataset.address;
    // 将地址对象转为JSON字符串传递给编辑页面
    dd.navigateTo({
      url: '/pages/address/edit?address=' + JSON.stringify(address)
    });
  },

  /**
   * 删除收货地址
   */
  deleteAddress(e) {
    const addressId = e.currentTarget.dataset.id;
    var that = this;
    
    dd.confirm({
      title: '删除确认',
      content: '确定要删除该收货地址吗？',
      confirmButtonText: '删除',
      cancelButtonText: '取消',
      success({ confirm }) {
        if (confirm) {
          that.doDeleteAddress(addressId);
        }
      }
    });
  },

  /**
   * 执行删除地址操作
   */
  doDeleteAddress(addressId) {
    console.log('addressId', addressId);
    var that = this;
    dd.showLoading({
      content: '删除中...'
    });

    // 将所有参数都放在请求体中
    dd.httpRequest({
      url: moduleUrl + '/delete',
      method: 'POST',
      headers: {
        "Content-Type": "application/json"
      },
      data: JSON.stringify({
        id: addressId,
        userId: app.userId
      }),

      success: function(res) {
        if (res.data.status === 200) {
          dd.showToast({
            type: 'success',
            content: '删除成功',
            duration: 2000
          });
          // 刷新地址列表
          that.getAddressList();
        } else {
          dd.showToast({
            type: 'fail',
            content: res.data.message || '删除失败',
            duration: 2000
          });
        }
      },
      fail: function(error) {
        console.error('删除地址失败:', error);
        dd.showToast({
          type: 'fail',
          content: '网络异常，请稍后重试',
          duration: 2000
        });
      },
      complete: function() {
        dd.hideLoading();
      }
    });
  },

  /**
   * 选择地址（从订单页面跳转而来时）
   */
  selectAddress(e) {
    if (!this.data.fromOrder) return;
    
    const addressId = e.currentTarget.dataset.id;
    const selectedAddress = this.data.addressList.find(item => item.id === addressId);
    
    if (selectedAddress) {
      // 将选中的地址传回订单页面
      const pages = getCurrentPages();
      const prevPage = pages[pages.length - 2]; // 获取上一个页面
      
      // 更新上一个页面的数据
      prevPage.setData({
        selectedAddress: selectedAddress
      });
      
      // 返回上一页
      dd.navigateBack();
    }
  }
}); 